#include"definicje.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include"protokol.h"
#include"adres.h"


/* lista serwerów */
struct adres adresy[1]=
{
   {"localhost","9999"},
};


/* Tworzy gniazdo i podaje adres */
void stworz(int *g, struct sockaddr_storage * s)
{
   unsigned int i;
   int wynik;
   struct addrinfo wskazowki;
   struct addrinfo *wyniki, *wskaznik;
   int gniazdo;
   bool utworzono;

   memset(&wskazowki, 0, sizeof(struct addrinfo));
   wskazowki.ai_family = AF_UNSPEC;
   wskazowki.ai_socktype = SOCK_DGRAM;
   utworzono=false;
   while(!utworzono)
   {
      for(i=0; (i<sizeof(adresy)/sizeof(struct adres)) && ! utworzono; ++i)
      {
	 wynik=getaddrinfo(adresy[i].serwer,adresy[i].port,&wskazowki,&wyniki);
	 if(wynik!=0)
	 {
	    fprintf(stderr, "getaddrinfo: %s\n",gai_strerror(wynik));
	    continue;
	 }
	 for(wskaznik = wyniki; (wskaznik != NULL) && ! utworzono; wskaznik=wskaznik->ai_next)
	 {
	    /*** Tu otwierane gniazdo - trzeba zamknąć ***/
	    gniazdo=socket(
		  wskaznik->ai_family,
		  wskaznik->ai_socktype,
		  wskaznik->ai_protocol
		  );
	    if(gniazdo==-1)
	    {
	       perror("socket");
	       continue;
	    }
	    utworzono=true;
	    memcpy(s,wskaznik->ai_addr,wskaznik->ai_addrlen);
	    *g=gniazdo;
	 }
	 freeaddrinfo(wyniki);
      }
   }
}


int main(int argc, char *argv[])
{int gniazdo;



    uint8_t bufor[100];
    uint8_t bufor2[100];

    uint8_t *bufor_wsk=bufor;
    uint8_t *bufor2_wsk=bufor2;

    uint8_t dane =htons(11u);
     uint8_t *temp=&dane;
     uint32_t ktoryTam=0;
     uint32_t ktory=0;


    struct sockaddr_storage adres;
    stworz(&gniazdo,&adres);

     wyslijzpotw(gniazdo,&adres,bufor_wsk,bufor2_wsk,&ktory,&ktoryTam);
   return EXIT_SUCCESS;
}


